package a19_DichromaticSystem;

import java.util.Random;
import java.util.Scanner;

/**
 * @Author quan
 * @Description 双色球系统
 * 要求：投注号码由6个红色球号码和1个蓝色球号码组成，红色球号码从1-33中选择，
 * 蓝色球号码从1-16中选择。
 * @Date 2023/2/3 11:05
 */
public class TestDemo {
    public static void main(String[] args) {
        //1、生成中奖号码
        int[] arr = createNum();
        System.out.println("中奖号码是：");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        //2、让用户输入一个号码
        int[] userNum = userInputNumber();
        //3、判断用户的得奖情况
        rightNumCase(arr,userNum);
    }

    //方法：判断用户的得奖情况
    public static void rightNumCase(int[] arr, int[] userNumArr){
        //红球，蓝球
        int redCount = 0;
        int blueCount = 0;
        //判断红球的中奖个数
        for (int i = 0; i < arr.length-1; i++) {
            //判断中奖红球的数字是否和用户自己的数字相等，相等则红球数++；
            if(userNumArr[i]==arr[i]){
                redCount++;
            }
        }
        System.out.println(redCount);
        //判断蓝球的中奖个数
        if(userNumArr[arr.length-1]==arr[arr.length-1]){
            blueCount++;
        }
        System.out.println(blueCount);
        //调用获奖情况的方法
        prizeCase(redCount,blueCount);

    }
    //方法：判断获奖情况
    public static void prizeCase(int rc, int bc){
        //通过红球和篮球个数的组合情况，来判断中奖情况
        if(rc==6){
            if(bc ==1){
                System.out.println("1000万");
            }else{
                System.out.println("500万");
            }
        } else if (rc==5||rc==4) {
            if(rc==5||bc==1){
                System.out.println("3000元");
            }else{
                System.out.println("200元");
            }
        } else {
            System.out.println("10元");
        }
    }


    //方法：让用户输入一个号码
    public static int[] userInputNumber(){
        //创建数组用于添加用户购买的彩票号码：7位
        int[] arr = new int[7];
        //键盘获取7位数字
        //键盘输入6次：表示红球
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第"+(i+1)+"个红球号码");
            int redNum = sc.nextInt();
            //安全校验数字是否合法
            if(redNum>0 && redNum<=33 && !contains(arr,redNum)){
                //将获取到的红球数字添加到用户数组中
                arr[i] = redNum;
                i++;
            }else{
                System.out.println("输入的号码数已存在,请重新输入！");
            }
        }
        //蓝球号码的安全性验证
        System.out.println("请输入蓝球号码");
        while (true) {
            int blueNum = sc.nextInt();//键盘输入蓝球号码
            if(blueNum>0 && blueNum<=16){
                //将获取到的蓝球数字添加到用户数组中
                arr[arr.length-1] = blueNum;
                break;
            }else{
                System.out.println("输入的格式不对，请重新输入！");
            }
        }
        return arr;
    }
    //方法：生成一个中奖的数字
    public static int[] createNum(){
        //创建数组用于添加中奖号码
        int[] arr = new int[7];
        //随机生成数组添加到数组中
        //红球：号码不能重复,12345...
        //篮球：可以和红球号码重复 5
        //生成红球号码并添加到数组中
        Random r = new Random();
        for (int i = 0; i < 6;) {
            int redRandomNum = r.nextInt(33)+1;
            //判断生成的红球号码不能重复
            boolean flag = contains(arr,redRandomNum);
            //flag为true，则重复，要重新生成; 为false，则不重复,将索引值赋值给数组中
            if(!flag){
                arr[i] = redRandomNum;
                i++;//不重复时,i值加加，重复时，i值不发生变化
            }
        }
        //生成篮球号码并添加到数组中
        int blueRandomIndex = r.nextInt(16)+1;
        arr[arr.length-1] = blueRandomIndex;
        return arr;
    }
    //方法：判断数字在数组中是否存在
    public static boolean contains(int[] arr, int num){
        //将数组中的每一个元素都和生成的随机索引值比较，看是否包含
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==num){
                return true;
            }
        }
        return false;
    }
}
